package io;

import java.io.*;

public class Stream {

	public static void main(String[] args) throws IOException {
		
		//写入为输出流，读取为输入流
		

		//文件输出字节流，会自动创建文件
		FileOutputStream fos = new FileOutputStream("c:/a/b/a.dat");
		//处理流==>对各种基本数据类型进行操作
		DataOutputStream dos = new DataOutputStream(fos);
		
		//b	字节数组
		//off 从哪个字节开始
		//len	长度
		//fos.write(b, off, len);//写数据
		//fos.flush()//将缓存的数据写出去
		try {
			//fos.write(257);
			dos.writeBoolean(true);
			dos.writeLong(12345678900000l);
			dos.writeUTF("hello world");
		}finally {
			dos.close();//	流在操作完后必须关闭
		}
		
		//文件输入字节流 文件必须存在
		FileInputStream fis = new FileInputStream("c:/a/b/a.dat");
		DataInputStream dis = new DataInputStream(fis);
		try {
			//System.out.println(fis.read());
			//fis.available()	获取流里面还有多少可以获取的字节数
			//fis.skip(n)		跳转n字节
			//先进先出
			System.out.println(dis.readBoolean());
			System.out.println(dis.readLong());
			System.out.println(dis.readUTF());
		}finally {
			dis.close();//流在操作完后必须关闭
		}
		
		System.out.println("============ 读取字符流 ============");
		
		//try(里面定义的流，会在try执行完之后，不管是否出现异常，都会关闭)
		// JDK 1.7新功能
		try(FileReader fr = new FileReader("D:\\仓库\\项目扩展功能需求.txt");){
			//数据缓冲区，舀水的勺子
			char[] chars = new char[100];
			// 勺子上刻度，记录数据的长度
			int count;
			while((   count = fr.read(chars))>-1) {
				String s =new String(chars,0,count);
				System.out.print(s);
			}
			
		}
	
				
		

	}

}
